flashworldfandomcom_ru-20200214-history
Модуль:Example
local p = {} -- используется для того, чтобы можно было удалять элементы из таблицы local function copy(other) local res = {} for k,v in pairs(other) do resk = v end return res end -- вызов шаблона, при ошибке возвращает пустую строку local function expand(frame, tname, targs) local success, result = pcall( frame.expandTemplate, frame, {title = tname, args = targs} ) if success then return result else return '' end --return frame:expandTemplate({title = tname, args = args}) end --предотвращает обработку вики-текста в отображении образца local function nowiki(str) local res = str str = mw.text.unstripNoWiki(str) str = string.gsub(str, '%'[') str = string.gsub(str, '%', ']') str = string.gsub(str, '<', '<') str = string.gsub(str, '>', '>') str = string.gsub(str, '{', '{') str = string.gsub(str, '}', '}') str = string.gsub(str, '\'', ') str = string.gsub(str, '"', '"') str = string.gsub(str, '(://)', '%1') return str end --удаляет из параметров вписанные через HTML-сущности "" и заменяет " " на "=" для вызова шаблона local function process_nowiki_equals(str) str = str:gsub(, ):gsub(, ) :gsub(, ):gsub(, '') :gsub(' ', '=') :gsub(' ', '=') :gsub(' ', '=') :gsub(' ', '=') :gsub('&', '&') return str end function p.main(frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end local yesno = require('Module:Yesno') local args = copy(getArgs(frame, {trim = false, removeBlanks = false})) --copy(frame.args) local tag = args._tag local container = args._container or nil local sep = args._sep and args._sep .. ' ' local link = yesno(args._link, false) local endl = args._endl or '' local prefix = args._prefix or args'_pre-text' or '' local postfix = args._postfix or args'_post-text' or '' local nobr = yesno(args._nobr, false) local spaced = yesno(args._spaced, false) local nocat = yesno(args._nocat, false) local style = args._style if style '' then style = nil end -- передаётся шаблоном , один разделитель на все примеры local comment_sep = args._comment_sep -- полезно в шаблоне (это просто текст в конце) local after = args._after or args._comment -- полезно в шаблоне (это просто текст в начале) local before = args._before and args._before .. ' ' or '' if style 'pre' then if not (tag or container) then container = 'pre' end sep = sep or '\n' elseif style '*pre' then if not (tag or container) then container = '*pre' end sep = sep or '\n' elseif style 'pre↓' then if not (tag or container) then container = 'pre' end -- содержимое шаблона sep = sep or ' ↓ \n' elseif style '*pre↓' then if not (tag or container) then container = '*pre' end -- содержимое шаблона sep = sep or ' ↓ \n' elseif style 'wikitable' then if not (tag or container) then tag = 'kbd' end sep = sep or '\n| ' comment_sep = '\n| ' end if not (tag or container) then tag = 'code' end if not sep then sep = '→ ' end if not comment_sep then comment_sep = ' ' end if (after) then if not style then after = '' .. after .. '' end after = comment_sep .. after end if not after then after = '' end local nwt if tag then nwt = mw.html.create(tag):tag(tag) -- "no-wiki tag", внутри него шаблон не вызывается if nobr then nwt:css('white-space', 'nowrap') end end local content = nowiki(prefix) .. ' ') equals_pos-2 then equals_pos = nil end if equals_pos then --содержащие "=" преобразуем в именованные param = v:sub(1, equals_pos-1) value = v:sub(equals_pos+1) targsparam = process_nowiki_equals(value) content = content .. (spaced and ' ' or '') .. '|' .. nowiki(param) .. '=' .. nowiki(value) .. endl left_shift = left_shift + 1 -- переменная нужна, чтобы квазинумерованные параметры, переданные через " ", -- не сбивали порядок else --истинно неименованные targs- left_shift = process_nowiki_equals(v) content = content .. (spaced and ' ' or '') .. '|' .. nowiki(v) .. endl end elseif not k:find('^_') then -- именованные параметры, исключая модификаторы внешнего вида targsk = process_nowiki_equals(v) content = content .. (spaced and ' ' or '') .. '|' .. nowiki(k) .. '=' .. nowiki(v) .. endl end end content = content .. '}}' .. nowiki(postfix) if container then local container_args = {} container_args1 = content nwt = expand(frame, container, container_args) else nwt:wikitext(content):done() end if nocat then targs'nocat' = 1 end expand_result = tostring(expand(frame, tname, targs)) if expand_result:sub(1, 2) '{|' then sep = sep .. '\n' end return before .. tostring(nwt) .. ' ' .. sep .. prefix .. expand_result .. postfix .. after end return p